<?php

/**
 * frecuencias actions.
 *
 * @package    SistemaRutasEc
 * @subpackage frecuencias
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class frecuenciasActions extends sfActions {

    public function executeIndex(sfWebRequest $request) {
        $this->idru = $request->getParameter('id_ru');
        $this->getUser()->setAttribute('id_ru', $this->idru);

        $q = Doctrine_Query::create()
                ->from('ruta r')
                ->where('r.id_ru=?', $this->idru);
        $this->ruta = $q->fetchOne();

        $q2 = Doctrine_Query::create()
                ->from('cooperativa c')
                ->where('c.id_co=?', $this->ruta->getIdCo());
        $this->coop = $q2->fetchOne();


        $this->frecuencias = Doctrine::getTable('frecuencia')->createQuery('f')
                ->where('f.id_ru = ?', $this->idru)
                ->execute();
    }

    public function executeActivar(sfWebRequest $request) {
        // sorting
        $idfr = $request->getParameter('id_fr');
        
        $fre = Doctrine::getTable('frecuencia')->find($idfr);
        if (!($fre instanceof frecuencia)) {
            $this->redirect404();
        }
        $fre['activo'] = !$fre['activo'];
        $fre->save();

        $this->redirect('frecuencias/index?id_ru='.$fre->getIdRu());
    }
    
    public function executeShow(sfWebRequest $request) {
        $this->frecuencia = Doctrine_Core::getTable('frecuencia')->find(array($request->getParameter('id_fr')));
        $this->forward404Unless($this->frecuencia);
    }

    public function executeNew(sfWebRequest $request) {
        $this->idr = $request->getParameter('id_ru');
        $this->getUser()->setAttribute('id_r', $this->idr);
        $this->form = new frecuenciaForm();
    }

    public function executeCreate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));
        $this->idr = $this->getUser()->getAttribute('id_r');

        $this->form = new frecuenciaForm();

        $this->processForm($request, $this->form);

        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request) {
        
        $this->idru = $request->getParameter('id_ru');
        $this->getUser()->setAttribute('id_ru', $this->idru);
        $this->forward404Unless($frecuencia = Doctrine_Core::getTable('frecuencia')->find(array($request->getParameter('id_fr'))), sprintf('Object frecuencia does not exist (%s).', $request->getParameter('id_fr')));
        $this->form = new FrecuenciaEditarForm($frecuencia);
    }

    public function executeUpdate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($frecuencia = Doctrine_Core::getTable('frecuencia')->find(array($request->getParameter('id_fr'))), sprintf('Object frecuencia does not exist (%s).', $request->getParameter('id_fr')));
        $this->form = new FrecuenciaEditarForm($frecuencia);

        $this->processFormEdit($request, $this->form);

        $this->setTemplate('edit');
    }

    public function executeDelete(sfWebRequest $request) {
        $request->checkCSRFProtection();

        $this->forward404Unless($frecuencia = Doctrine_Core::getTable('frecuencia')->find(array($request->getParameter('id_fr'))), sprintf('Object frecuencia does not exist (%s).', $request->getParameter('id_fr')));
        $aux = $frecuencia->getIdRu();
        $frecuencia->delete();
        $this->getUser()->setFlash('notice', 'Freacuencia eliminada exitosamente!');
        $this->redirect('frecuencias/index?id_ru=' . $aux);
    }

    protected function processForm(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {
            //consulta a la inversa
            $c = Doctrine_Query::create()
                    ->from('ruta r')
                    ->where('r.id_ru=?', $this->getUser()->getAttribute('id_ru'));
            $rutaux = $c->fetchOne();
            $rutbusres = Doctrine::getTable('ruta')->createQuery('r')
                    ->where('r.id_co = ?', $rutaux->getIdCo())
                    ->execute();
            $vectfrebus = new ArrayObject();
            $c = 0;
            foreach ($rutbusres as $rbr):
                $frebusres = Doctrine::getTable('frecuencia')->createQuery('f')
                        ->where('f.id_ru = ?', $rbr->getIdRu())
                        ->execute();
                foreach ($frebusres as $fbr):
                    $vectfrebus[$c] = $fbr;
                    $c++;
                endforeach;

            endforeach;

            if (count($vectfrebus) == 0) {
                $form->getObject()->setIdRu($this->getUser()->getAttribute('id_ru'));
                $frecuencia = $form->save();
                $frecuencia->setActivo(true);
                $frecuencia->save();
                $this->getUser()->setFlash('notice', 'Frecuencia agregada exitosamente!');
                $this->redirect('frecuencias/index?id_ru=' . $frecuencia->getIdRu());
                
            } else {
                $idfrebus = null;
                $ban = false;
                $form->getObject()->setIdRu($this->getUser()->getAttribute('id_ru'));
                $frecuencia = $form->save();
                $frecuencia->setActivo(true);
                $frecuencia->save();
                foreach ($vectfrebus as $vfbr):
                    if ($frecuencia->getPrioridad() == $vfbr->getPrioridad()) {
                        $idfrebus = $vfbr->getIdFr();
                        $ban = true;
                    }
                endforeach;
                if ($ban == true) {

                    $cons = Doctrine_Query::create()
                            ->from('frecuencia f')
                            ->where('f.id_fr=?', $idfrebus);
                    $coidfreaux = $cons->fetchOne();

                    if ($coidfreaux->getEspecial() == true && $frecuencia->getEspecial() == true) {
                        //no se guarda
                        $frecuencia->delete();
                        $this->getUser()->setFlash('error', 'No se puede guardar, porque existe una frecuencia con la misma prioridad en el tipo especial!');
                        $this->redirect('frecuencias/new?id_ru=' . $this->getUser()->getAttribute('id_ru'));
                    } else if ($coidfreaux->getEspecial() == false && $frecuencia->getEspecial() == false) {
                        // no se guarda
                        $frecuencia->delete();
                        $this->getUser()->setFlash('error', 'No se puede guardar, porque existe una frecuencia con la misma prioridad en el tipo normal!');
                        $this->redirect('frecuencias/new?id_ru=' . $this->getUser()->getAttribute('id_ru'));
                    } else if ($coidfreaux->getEspecial() == true && $frecuencia->getEspecial() == false) {
                        //si se guarda
                        $this->getUser()->setFlash('notice', 'Frecuencia agregada exitosamente!');
                        $this->redirect('frecuencias/index?id_ru=' . $this->getUser()->getAttribute('id_ru'));
                    } else if ($coidfreaux->getEspecial() == false && $frecuencia->getEspecial() == true) {
                        //si se guarda
                        $this->getUser()->setFlash('notice', 'Frecuencia agregada exitosamente!');
                        $this->redirect('frecuencias/index?id_ru=' . $this->getUser()->getAttribute('id_ru'));
                    }
                } else {
                    //$frecuencia->delete();
                    $this->getUser()->setFlash('notice', 'Frecuencia agregada exitosamente!');
                    $this->redirect('frecuencias/index?id_ru=' . $this->getUser()->getAttribute('id_ru'));
                }
            }
        }
    }

    protected function processFormEdit(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {
            
                $frecuencia = $form->save();
                $this->getUser()->setFlash('notice', 'Frecuencia editada exitosamente!');
                $this->redirect('frecuencias/index?id_ru=' . $frecuencia->getIdRu());
            
            
            
        }
    }

}
